// 集中存放一些工具方法函数
import { RouteRecordRaw } from "vue-router";
import { routes } from "../router";
import { cloneDeep } from "lodash-es";
//把路由数据包处理成如下格式
// {
//     '/dashboard':'数据可视化'
// }
interface RouteMapType {
  [key: string]: any;
}
export const routeMapTool = () => {
  let routeMap: RouteMapType = {};
  //递归函数
  function loop(arr: RouteRecordRaw[]) {
    arr.forEach((item) => {
      routeMap[item.path] = item.meta!.title;
      if (item.children) {
        loop(item.children); //递归调用
      }
    });
  }
  loop(routes[0].children!); //首次调用
  console.log("【路径-标题】的数据包", routeMap);

  return routeMap;
};

//根据permission权限数组，过滤路由数据包
// bug原因：使用forEach时，移除数组中的某一项会导致下标移位，进而导致某些数据包被跳过了
//permission =  ['category/list']
// export const filterRoutes = (permission: Array<string>) => {
//   // 避免影响原始是数据，可以使用lodash对原始数据包routes做一个深拷贝
//   let routeArr: RouteRecordRaw[] = cloneDeep(routes[0].children!); //深拷贝
//   routeArr.forEach((item, idx) => {
//     if (item.children) {
//       //item.path = 'category'
//       let islike = permission.filter((path) => path.indexOf(item.path) != -1);
//       if (!permission.includes(item.path) && islike.length == 0) {
//         //整个permission中没有找到任何一个跟父级path相像的路径
//         console.log("111", item.path);

//         routeArr.splice(idx, 1);
//       } else {
//         //保留父级，过滤children
//         console.log("222", item.path);
//         let arr = item.children.filter((child) =>
//           permission.includes(child.path)
//         );
//         console.log("children", arr);

//         item.children = arr;
//       }
//     } else {
//       if (!permission.includes(item.path)) {
//         routeArr.splice(idx, 1);
//       }
//     }
//   });
//   return routeArr;
// };

export const filterRoutes = (permission: Array<string>) => {
  // 避免影响原始是数据，可以使用lodash对原始数据包routes做一个深拷贝
  let routeArr: RouteRecordRaw[] = cloneDeep(routes[0].children!); //深拷贝
  for (let i = routeArr.length - 1; i >= 0; i--) {
    let item = routeArr[i];
    if (item.children) {
      //item.path = 'category'
      let islike = permission.filter((path) => path.indexOf(item.path) != -1);
      if (!permission.includes(item.path) && islike.length == 0) {
        //整个permission中没有找到任何一个跟父级path相像的路径
        console.log("111", item.path);

        routeArr.splice(i, 1);
      } else {
        //保留父级，过滤children
        console.log("222", item.path);
        let arr = item.children.filter((child) =>
          permission.includes(child.path)
        );
        console.log("children", arr);

        item.children = arr;
      }
    } else {
      if (!permission.includes(item.path)) {
        routeArr.splice(i, 1);
      }
    }
  }
  return routeArr;
};
